// //This script will only work in editor mode. You cannot adjust the scale dynamically in-game!
// using UnityEngine;
// using System.Collections;

// #if UNITY_EDITOR 
// using UnityEditor;
// #endif

// //only use on UnityEditor, please before you build package set scale size in the editor
// //------------------------------------------------------------
// shaco Framework
// Copyright © 2017-2021 chang.liu All rights reserved.
// Feedback: 449612236@qq.com
//------------------------------------------------------------

// // namespace shaco
// {
//     [ExecuteInEditMode]
//     public class ParticleScaler : MonoBehaviour
//     {
//         public float particleScale = 1.0f;
//         public bool alsoScaleGameobject = true;

// #if UNITY_EDITOR
//         float prevScale;
// #endif

//         void Start()
//         {
// #if UNITY_EDITOR
//             prevScale = particleScale;
// #endif
//         }

//         void Update()
//         {
// #if UNITY_EDITOR
//             //check if we need to update
//             if (prevScale != particleScale && particleScale > 0)
//             {
//                 if (alsoScaleGameobject)
//                     transform.localScale = new Vector3(particleScale, particleScale, particleScale);

//                 float scaleFactor = particleScale / prevScale;

//                 //scale legacy particle systems
//                 ScaleLegacySystems(scaleFactor);

//                 //scale shuriken particle systems
//                 ScaleShurikenSystems(scaleFactor);

//                 //scale trail renders
//                 ScaleTrailRenderers(scaleFactor);

//                 prevScale = particleScale;
//             }
// #endif
//         }

//         void ScaleShurikenSystems(float scaleFactor)
//         {
// #if UNITY_EDITOR
//             //get all shuriken systems we need to do scaling on
//             ParticleSystem[] systems = GetComponentsInChildren<ParticleSystem>();

//             foreach (ParticleSystem system in systems)
//             {
//                 system.startSpeed *= scaleFactor;
//                 system.startSize *= scaleFactor;
//                 system.gravityModifier *= scaleFactor;

//                 //some variables cannot be accessed through regular script, we will acces them through a serialized object
//                 SerializedObject so = new SerializedObject(system);

//                 //unity 4.0 and onwards will already do this one for us
// #if UNITY_3_5
// 			so.FindProperty("ShapeModule.radius").floatValue *= scaleFactor;
// 			so.FindProperty("ShapeModule.boxX").floatValue *= scaleFactor;
// 			so.FindProperty("ShapeModule.boxY").floatValue *= scaleFactor;
// 			so.FindProperty("ShapeModule.boxZ").floatValue *= scaleFactor;
// #endif

//                 so.FindProperty("VelocityModule.x.scalar").floatValue *= scaleFactor;
//                 so.FindProperty("VelocityModule.y.scalar").floatValue *= scaleFactor;
//                 so.FindProperty("VelocityModule.z.scalar").floatValue *= scaleFactor;
//                 so.FindProperty("ClampVelocityModule.magnitude.scalar").floatValue *= scaleFactor;
//                 so.FindProperty("ClampVelocityModule.x.scalar").floatValue *= scaleFactor;
//                 so.FindProperty("ClampVelocityModule.y.scalar").floatValue *= scaleFactor;
//                 so.FindProperty("ClampVelocityModule.z.scalar").floatValue *= scaleFactor;
//                 so.FindProperty("ForceModule.x.scalar").floatValue *= scaleFactor;
//                 so.FindProperty("ForceModule.y.scalar").floatValue *= scaleFactor;
//                 so.FindProperty("ForceModule.z.scalar").floatValue *= scaleFactor;
//                 so.FindProperty("ColorBySpeedModule.range").vector2Value *= scaleFactor;
//                 so.FindProperty("SizeBySpeedModule.range").vector2Value *= scaleFactor;
//                 so.FindProperty("RotationBySpeedModule.range").vector2Value *= scaleFactor;

//                 so.ApplyModifiedProperties();
//             }
// #endif
//         }

//         void ScaleLegacySystems(float scaleFactor)
//         {
// #if UNITY_EDITOR
//             //get all emitters we need to do scaling on
//             ParticleEmitter[] emitters = GetComponentsInChildren<ParticleEmitter>();

//             //get all animators we need to do scaling on
//             ParticleAnimator[] animators = GetComponentsInChildren<ParticleAnimator>();

//             //apply scaling to emitters
//             foreach (ParticleEmitter emitter in emitters)
//             {
//                 emitter.minSize *= scaleFactor;
//                 emitter.maxSize *= scaleFactor;
//                 emitter.worldVelocity *= scaleFactor;
//                 emitter.localVelocity *= scaleFactor;
//                 emitter.rndVelocity *= scaleFactor;

//                 //some variables cannot be accessed through regular script, we will acces them through a serialized object
//                 SerializedObject so = new SerializedObject(emitter);

//                 so.FindProperty("m_Ellipsoid").vector3Value *= scaleFactor;
//                 so.FindProperty("tangentVelocity").vector3Value *= scaleFactor;
//                 so.ApplyModifiedProperties();
//             }

//             //apply scaling to animators
//             foreach (ParticleAnimator animator in animators)
//             {
//                 animator.force *= scaleFactor;
//                 animator.rndForce *= scaleFactor;
//             }
// #endif
//         }

//         void ScaleTrailRenderers(float scaleFactor)
//         {
//             //get all animators we need to do scaling on
//             TrailRenderer[] trails = GetComponentsInChildren<TrailRenderer>();

//             //apply scaling to animators
//             foreach (TrailRenderer trail in trails)
//             {
//                 trail.startWidth *= scaleFactor;
//                 trail.endWidth *= scaleFactor;
//             }
//         }
//     }
// }